package org.andes.kownledge.operator.func;

import org.andes.kownledge.OperatorManager;

public class FuncBuilder {
	
	
	
	
	public static Func getFunc(String funName){
		//System.out.println("funName:"+funName);
		OperatorManager.funSet.add(funName);
		if(funName.equalsIgnoreCase("AND"))
			return new AND();
		else if(funName.equalsIgnoreCase("BODY-NAME"))
			return new BodyName();
		else if(funName.equalsIgnoreCase("CADR"))
			return new CADR();
		else if(funName.equalsIgnoreCase("CDR"))
			return new Cdr();
		else if(funName.equalsIgnoreCase("CROSS-PRODUCT-DIR"))
			return new ChooseProductDir();
		else if(funName.equalsIgnoreCase("COMPONENTP"))
			return new COMPONENTP();
		else if(funName.equalsIgnoreCase("COND"))
			return new Cond();
		else if(funName.equalsIgnoreCase("CONS"))
			return new CONS();
		else if(funName.equalsIgnoreCase("DEFINITE-DIRECTIONP"))
			return new DefiniteDirectionp();
		else if(funName.equalsIgnoreCase("DEGREE-SPECIFIERP"))
			return new DereeSpecifierp();
		else if(funName.equalsIgnoreCase("DIR-VAR-VALUE"))
			return new DirVarValue();
		else if(funName.equalsIgnoreCase("DNUM"))
			return new Dnum();
		else if(funName.equalsIgnoreCase("DURING"))
			return new During();
		else if(funName.equalsIgnoreCase("EQ"))
			return new EQ();
		else if(funName.equalsIgnoreCase("EQL"))
			return new EQL();
		else if(funName.equalsIgnoreCase("EQUAL"))
			return new EQUAL();
		else if(funName.equalsIgnoreCase("ERROR"))
			return new ERROR();
		else if(funName.equalsIgnoreCase("FIND"))
			return new Find();
		else if(funName.equalsIgnoreCase("FIRST"))
			return new First();
		else if(funName.equalsIgnoreCase("FORMAT-SYM"))
			return new FormatSym();
		else if(funName.equalsIgnoreCase("function"))
			return new Function();
		
		else if(funName.equalsIgnoreCase("GET-ANGLE-BETWEEN"))
			return new GetAngleBetween();
		else if(funName.equalsIgnoreCase("GROUNDP"))
			return new GROUNDP();
		else if(funName.equalsIgnoreCase("IF"))
			return new IF();
		else if(funName.equalsIgnoreCase("LENGTH"))
			return new Length();
		else if(funName.equalsIgnoreCase("LIST"))
			return new LIST();
		else if(funName.equalsIgnoreCase("listp"))
			return new ListP();
		else if(funName.equalsIgnoreCase("member"))
			return new Member();
		else if(funName.equalsIgnoreCase("MINIMAL-X-ROTATIONS"))
			return new MINIMALXROTATIONS();		
		else if(funName.equalsIgnoreCase("NON-ZERO-PROJECTIONP"))
			return new NONZEROPROJECTIONP();
		else if(funName.equalsIgnoreCase("not"))
			return new Not();
		else if(funName.equalsIgnoreCase("null"))
			return new NULL();
		else if(funName.equalsIgnoreCase("numberp"))
			return new NumberP();
		else if(funName.equalsIgnoreCase("OPPOSITE"))
			return new Opposite();
		else if(funName.equalsIgnoreCase("or"))
			return new OrFunc();
		else if(funName.equalsIgnoreCase("ORDERLESS-P"))
			return new OrderlessP();
		else if(funName.equalsIgnoreCase("PARAMETER-OR-UNKNOWNP"))
			return new ParameterOrUnknowp();
		else if(funName.equalsIgnoreCase("PERPENDICULARP"))
			return new Perpendicularp();
		else if(funName.equalsIgnoreCase("PROBLEM-CHOICES"))
			return new ProblemChoices();
		else if(funName.equalsIgnoreCase("PROBLEM-IGNOREPSMS"))
			return new ProblemIgnorepsms();
		else if(funName.equalsIgnoreCase("PROPER-SUBINTERVALP"))
			return new ProperSubIntervalp();
		
		else if(funName.equalsIgnoreCase("quote"))
			return new Quote();
		else if(funName.equalsIgnoreCase("REMOVE-DUPLICATES"))
			return new REMOVEDUPLICATES();	
		else if(funName.equalsIgnoreCase("REMOVE-TIME"))
			return new RemoveTime();
		else if(funName.equalsIgnoreCase("Rest"))
			return new Rest();
		else if(funName.equalsIgnoreCase("SCALAR-QUANTITYP"))
			return new SCALARQUANTITYP();
		else if(funName.equalsIgnoreCase("SECOND"))
			return new Second();
		else if(funName.equalsIgnoreCase("SET-DIFFERENCE"))
			return new SetDifference();
		else if(funName.equalsIgnoreCase("SET-TIME"))
			return new SETTIME();		
		else if(funName.equalsIgnoreCase("SORT"))
			return new Sort();
		else if(funName.equalsIgnoreCase("SUCCESSIVE-INTERVALS"))
			return new SuccessiveIntervals();
		else if(funName.equalsIgnoreCase("TENDPOINTP"))
			return new TendPointP();
		else if(funName.equalsIgnoreCase("THIRD"))
			return new Third();
		else if(funName.equalsIgnoreCase("TIME-ABBREV"))
			return new TimeAbbrev();
		else if(funName.equalsIgnoreCase("TIME-CONSECUTIVEP"))
			return new TimeConsecutivep();
		else if(funName.equalsIgnoreCase("TIME-INTERVALP"))
			return new TimeIntervalp();
		else if(funName.equalsIgnoreCase("TIME-OF"))
			return new TIMEOF();	
		else if(funName.equalsIgnoreCase("TIME-POINTP"))
			return new TimePointp();
		else if(funName.equalsIgnoreCase("TINSIDEP"))
			return new TINSIDEP();
		else if(funName.equalsIgnoreCase("TINSIDEP-INCLUDE-ENDPOINTS"))
			return new TINSIDEPINCLUDEENDPOINTS();
		else if(funName.equalsIgnoreCase("Z-DIR-SPEC"))
			return new ZdirSpec();
		else if(funName.equalsIgnoreCase("ZDIR-PHI"))
			return new ZDIRPHI();
		else if(funName.equalsIgnoreCase("-"))
			return new Minus();
		else if(funName.equalsIgnoreCase(">"))
			return new GT();
		else if(funName.equalsIgnoreCase("<"))
			return new LT();
		else if(funName.equalsIgnoreCase("+"))
			return new Plus();
	
		
		return new XWF(funName);
		
	}
	

}
